Houdiniメモ : UVを0-1に収める
環境
Houdini Version 18.0.287
はじめに
以下のような、UVが0-1の正方形に収まっていない場合を考えます。
https://gyazo.com/03c4197025d16f7d14260c335dbf2b49
これを以下のように0-1の正方形にぴったり収める方法を紹介します。
https://gyazo.com/4f8e455b787b4e5814c953139a3a0e70
方法01 : UV Transform を使う方法
https://gyazo.com/18fd2c9085ed30f3c61b99b7ca26765b
https://gyazo.com/9eca06685bb603b6ea2db68554d85099
方法02 : Attribute Promote を使う方法
ノード構成
https://gyazo.com/0b83542fd918c6a97fccedecee08edde
ノード1 : UVの最小値を取得
Attirubte Promoteを使ってuvの最小値を取得し、uv_minとして新しく保存します。
https://gyazo.com/fcdb1e08e3a5637b716acae66b3ed06e https://gyazo.com/23b91ea527ce4889c7f974a362243750
ノード2 : UVの最大値を取得
Attirubte Promoteを使ってuvの最大値を取得し、uv_maxとして新しく保存します。
https://gyazo.com/377e50ec272674e35267ad9393a72d3d https://gyazo.com/f52ba3f84d9b656cab50090c715408e2
ノード3 : UVを0~1の範囲に収める
Attribute Wrangleノードを使い、UVを0~1に収めるVEXを記述します。
https://gyazo.com/326107272957fcfd422909fa0f60a8dc https://gyazo.com/0746007c94af731486317964ae7239ac
detail関数を使ってdetail上のアトリビュートを取得し、fit関数でuvの範囲を0~1に収まるように変換しています。
code:attribwrangle1(c)
// detailが持つアトリビュート uv_min を取得
vector uv_min = detail(geoself(), "uv_min", 0);
// detailが持つアトリビュート uv_max を取得
vector uv_max = detail(geoself(), "uv_max", 0);
// uv を 範囲(uv_min ~ uv_max)から 範囲(0 ~ 1)へ変換
@uv = fit(@uv, uv_min, uv_max, 0, 1);